home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / NROOMS < prev    next >
Text File  |  1991-05-20  |  10KB  |  523 lines

  1. /* RAPPL2- SPECIAL PURPOSE ROOM ROUTINES, PART 2 */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include "funcs.h"
  8. #include "vars.h"
  9.  
  10. static void ewtell_ P((integer, integer));
  11. static void lookto_ P((integer, integer, integer, integer, integer));
  12.  
  13. logical rappl2_(ri)
  14. integer ri;
  15. {
  16.     /* Initialized data */
  17.  
  18.     const integer newrms = 38;
  19.  
  20.     /* System generated locals */
  21.     integer i__1;
  22.     logical ret_val;
  23.  
  24.     /* Local variables */
  25.     integer i;
  26.     integer j;
  27.  
  28.     ret_val = TRUE_;
  29.     switch (ri - newrms + 1) {
  30.     case 1:  goto L38000;
  31.     case 2:  goto L39000;
  32.     case 3:  goto L40000;
  33.     case 4:  goto L41000;
  34.     case 5:  goto L42000;
  35.     case 6:  goto L43000;
  36.     case 7:  goto L44000;
  37.     case 8:  goto L45000;
  38.     case 9:  goto L46000;
  39.     case 10:  goto L47000;
  40.     case 11:  goto L48000;
  41.     case 12:  goto L49000;
  42.     case 13:  goto L50000;
  43.     case 14:  goto L51000;
  44.     case 15:  goto L52000;
  45.     case 16:  goto L53000;
  46.     case 17:  goto L54000;
  47.     case 18:  goto L55000;
  48.     case 19:  goto L56000;
  49.     case 20:  goto L57000;
  50.     case 21:  goto L58000;
  51.     case 22:  goto L59000;
  52.     case 23:  goto L60000;
  53.     }
  54.     bug_(70, ri);
  55.     return ret_val;
  56.  
  57. /* R38--    MIRROR D ROOM */
  58.  
  59. L38000:
  60.     if (prsvec_1.prsa == vindex_1.lookw) {
  61.     lookto_(rindex_1.fdoor, rindex_1.mrg, 0, 682, 681);
  62.     }
  63.     return ret_val;
  64.  
  65. /* R39--    MIRROR G ROOM */
  66.  
  67. L39000:
  68.     if (prsvec_1.prsa == vindex_1.walkiw) {
  69.     jigsup_(685);
  70.     }
  71.     return ret_val;
  72.  
  73. /* R40--    MIRROR C ROOM */
  74.  
  75. L40000:
  76.     if (prsvec_1.prsa == vindex_1.lookw) {
  77.     lookto_(rindex_1.mrg, rindex_1.mrb, 683, 0, 681);
  78.     }
  79.     return ret_val;
  80.  
  81. /* R41--    MIRROR B ROOM */
  82.  
  83. L41000:
  84.     if (prsvec_1.prsa == vindex_1.lookw) {
  85.     lookto_(rindex_1.mrc, rindex_1.mra, 0, 0, 681);
  86.     }
  87.     return ret_val;
  88.  
  89. /* R42--    MIRROR A ROOM */
  90.  
  91. L42000:
  92.     if (prsvec_1.prsa == vindex_1.lookw) {
  93.     lookto_(rindex_1.mrb, 0, 0, 684, 681);
  94.     }
  95.     return ret_val;
  96. /* RAPPL2, PAGE 3 */
  97.  
  98. /* R43--    MIRROR C EAST/WEST */
  99.  
  100. L43000:
  101.     if (prsvec_1.prsa == vindex_1.lookw) {
  102.     ewtell_(play_1.here, 683);
  103.     }
  104.     return ret_val;
  105.  
  106. /* R44--    MIRROR B EAST/WEST */
  107.  
  108. L44000:
  109.     if (prsvec_1.prsa == vindex_1.lookw) {
  110.     ewtell_(play_1.here, 686);
  111.     }
  112.     return ret_val;
  113.  
  114. /* R45--    MIRROR A EAST/WEST */
  115.  
  116. L45000:
  117.     if (prsvec_1.prsa == vindex_1.lookw) {
  118.     ewtell_(play_1.here, 687);
  119.     }
  120.     return ret_val;
  121.  
  122. /* R46--    INSIDE MIRROR */
  123.  
  124. L46000:
  125.     if (prsvec_1.prsa != vindex_1.lookw) {
  126.     return ret_val;
  127.     }
  128. /*                         !LOOK? */
  129.     rspeak_(688);
  130. /*                         !DESCRIBE */
  131.  
  132. /* NOW DESCRIBE POLE STATE. */
  133.  
  134. /* CASES 1,2--    MDIR=270 & MLOC=MRB, POLE IS UP OR IN HOLE */
  135. /* CASES 3,4--    MDIR=0 V MDIR=180, POLE IS UP OR IN CHANNEL */
  136. /* CASE 5--    POLE IS UP */
  137.  
  138.     i = 689;
  139. /*                         !ASSUME CASE 5. */
  140.     if (findex_1.mdir == 270 && findex_1.mloc == rindex_1.mrb) {
  141.     i = min(findex_1.poleuf,1) + 690;
  142.     }
  143.     if (findex_1.mdir % 180 == 0) {
  144.     i = min(findex_1.poleuf,1) + 692;
  145.     }
  146.     rspeak_(i);
  147. /*                         !DESCRIBE POLE. */
  148.     i__1 = findex_1.mdir / 45 + 695;
  149.     rspsub_(694, i__1);
  150. /*                         !DESCRIBE ARROW. */
  151.     return ret_val;
  152. /* RAPPL2, PAGE 4 */
  153.  
  154. /* R47--    MIRROR EYE ROOM */
  155.  
  156. L47000:
  157.     if (prsvec_1.prsa != vindex_1.lookw) {
  158.     return ret_val;
  159.     }
  160. /*                         !LOOK? */
  161.     i = 704;
  162. /*                         !ASSUME BEAM STOP. */
  163.     i__1 = objcts_1.olnt;
  164.     for (j = 1; j <= i__1; ++j) {
  165.     if (qhere_(j, play_1.here) && j != oindex_1.rbeam) {
  166.         goto L47200;
  167.     }
  168. /* L47100: */
  169.     }
  170.     i = 703;
  171. L47200:
  172.     rspsub_(i, objcts_1.odesc2[j - 1]);
  173. /*                         !DESCRIBE BEAM. */
  174.     lookto_(rindex_1.mra, 0, 0, 0, 0);
  175. /*                         !LOOK NORTH. */
  176.     return ret_val;
  177.  
  178. /* R48--    INSIDE CRYPT */
  179.  
  180. L48000:
  181.     if (prsvec_1.prsa != vindex_1.lookw) {
  182.     return ret_val;
  183.     }
  184. /*                         !LOOK? */
  185.     i = 46;
  186. /*                         !CRYPT IS OPEN/CLOSED. */
  187.     if ((objcts_1.oflag2[oindex_1.tomb - 1] & OPENBT) != 0) {
  188.     i = 12;
  189.     }
  190.     rspsub_(705, i);
  191.     return ret_val;
  192.  
  193. /* R49--    SOUTH CORRIDOR */
  194.  
  195. L49000:
  196.     if (prsvec_1.prsa != vindex_1.lookw) {
  197.     return ret_val;
  198.     }
  199. /*                         !LOOK? */
  200.     rspeak_(706);
  201. /*                         !DESCRIBE. */
  202.     i = 46;
  203. /*                         !ODOOR IS OPEN/CLOSED. */
  204.     if ((objcts_1.oflag2[oindex_1.odoor - 1] & OPENBT) != 0) {
  205.     i = 12;
  206.     }
  207.     if (findex_1.lcell == 4) {
  208.     rspsub_(707, i);
  209.     }
  210. /*                         !DESCRIBE ODOOR IF THERE. */
  211.     return ret_val;
  212.  
  213. /* R50--    BEHIND DOOR */
  214.  
  215. L50000:
  216.     if (prsvec_1.prsa != vindex_1.walkiw) {
  217.     goto L50100;
  218.     }
  219. /*                         !WALK IN? */
  220.     cevent_1.cflag[cindex_1.cevfol - 1] = TRUE_;
  221. /*                         !MASTER FOLLOWS. */
  222.     cevent_1.ctick[cindex_1.cevfol - 1] = -1;
  223.     return ret_val;
  224.  
  225. L50100:
  226.     if (prsvec_1.prsa != vindex_1.lookw) {
  227.     return ret_val;
  228.     }
  229. /*                         !LOOK? */
  230.     i = 46;
  231. /*                         !QDOOR IS OPEN/CLOSED. */
  232.     if ((objcts_1.oflag2[oindex_1.qdoor - 1] & OPENBT) != 0) {
  233.     i = 12;
  234.     }
  235.     rspsub_(708, i);
  236.     return ret_val;
  237. /* RAPPL2, PAGE 5 */
  238.  
  239. /* R51--    FRONT DOOR */
  240.  
  241. L51000:
  242.     if (prsvec_1.prsa == vindex_1.walkiw) {
  243.     cevent_1.ctick[cindex_1.cevfol - 1] = 0;
  244.     }
  245. /*                         !IF EXITS, KILL FOLLOW. */
  246.     if (prsvec_1.prsa != vindex_1.lookw) {
  247.     return ret_val;
  248.     }
  249. /*                         !LOOK? */
  250.     lookto_(0, rindex_1.mrd, 709, 0, 0);
  251. /*                         !DESCRIBE SOUTH. */
  252.     i = 46;
  253. /*                         !PANEL IS OPEN/CLOSED. */
  254.     if (findex_1.inqstf) {
  255.     i = 12;
  256.     }
  257. /*                         !OPEN IF INQ STARTED. */
  258.     j = 46;
  259. /*                         !QDOOR IS OPEN/CLOSED. */
  260.     if ((objcts_1.oflag2[oindex_1.qdoor - 1] & OPENBT) != 0) {
  261.     j = 12;
  262.     }
  263.     rspsb2_(710, i, j);
  264.     return ret_val;
  265.  
  266. /* R52--    NORTH CORRIDOR */
  267.  
  268. L52000:
  269.     if (prsvec_1.prsa != vindex_1.lookw) {
  270.     return ret_val;
  271.     }
  272. /*                         !LOOK? */
  273.     i = 46;
  274.     if ((objcts_1.oflag2[oindex_1.cdoor - 1] & OPENBT) != 0) {
  275.     i = 12;
  276.     }
  277. /*                         !CDOOR IS OPEN/CLOSED. */
  278.     rspsub_(711, i);
  279.     return ret_val;
  280.  
  281. /* R53--    PARAPET */
  282.  
  283. L53000:
  284.     if (prsvec_1.prsa == vindex_1.lookw) {
  285.     i__1 = findex_1.pnumb + 712;
  286.     rspsub_(712, i__1);
  287.     }
  288.     return ret_val;
  289.  
  290. /* R54--    CELL */
  291.  
  292. L54000:
  293.     if (prsvec_1.prsa != vindex_1.lookw) {
  294.     return ret_val;
  295.     }
  296. /*                         !LOOK? */
  297.     i = 721;
  298. /*                         !CDOOR IS OPEN/CLOSED. */
  299.     if ((objcts_1.oflag2[oindex_1.cdoor - 1] & OPENBT) != 0) {
  300.     i = 722;
  301.     }
  302.     rspeak_(i);
  303.     i = 46;
  304. /*                         !ODOOR IS OPEN/CLOSED. */
  305.     if ((objcts_1.oflag2[oindex_1.odoor - 1] & OPENBT) != 0) {
  306.     i = 12;
  307.     }
  308.     if (findex_1.lcell == 4) {
  309.     rspsub_(723, i);
  310.     }
  311. /*                        !DESCRIBE. */
  312.     return ret_val;
  313.  
  314. /* R55--    PRISON CELL */
  315.  
  316. L55000:
  317.     if (prsvec_1.prsa == vindex_1.lookw) {
  318.     rspeak_(724);
  319.     }
  320. /*                         !LOOK? */
  321.     return ret_val;
  322.  
  323. /* R56--    NIRVANA CELL */
  324.  
  325. L56000:
  326.     if (prsvec_1.prsa != vindex_1.lookw) {
  327.     return ret_val;
  328.     }
  329. /*                         !LOOK? */
  330.     i = 46;
  331. /*                         !ODOOR IS OPEN/CLOSED. */
  332.     if ((objcts_1.oflag2[oindex_1.odoor - 1] & OPENBT) != 0) {
  333.     i = 12;
  334.     }
  335.     rspsub_(725, i);
  336.     return ret_val;
  337. /* RAPPL2, PAGE 6 */
  338.  
  339. /* R57--    NIRVANA AND END OF GAME */
  340.  
  341. L57000:
  342.     if (prsvec_1.prsa != vindex_1.walkiw) {
  343.     return ret_val;
  344.     }
  345. /*                         !WALKIN? */
  346.     rspeak_(726);
  347.     score_(0);
  348. /* moved to exit routine    CLOSE(DBCH) */
  349.     exit_();
  350.  
  351. /* R58--    TOMB ROOM */
  352.  
  353. L58000:
  354.     if (prsvec_1.prsa != vindex_1.lookw) {
  355.     return ret_val;
  356.     }
  357. /*                         !LOOK? */
  358.     i = 46;
  359. /*                         !TOMB IS OPEN/CLOSED. */
  360.     if ((objcts_1.oflag2[oindex_1.tomb - 1] & OPENBT) != 0) {
  361.     i = 12;
  362.     }
  363.     rspsub_(792, i);
  364.     return ret_val;
  365.  
  366. /* R59--    PUZZLE SIDE ROOM */
  367.  
  368. L59000:
  369.     if (prsvec_1.prsa != vindex_1.lookw) {
  370.     return ret_val;
  371.     }
  372. /*                         !LOOK? */
  373.     i = 861;
  374. /*                         !ASSUME DOOR CLOSED. */
  375.     if (findex_1.cpoutf) {
  376.     i = 862;
  377.     }
  378. /*                         !OPEN? */
  379.     rspeak_(i);
  380. /*                         !DESCRIBE. */
  381.     return ret_val;
  382.  
  383. /* R60--    PUZZLE ROOM */
  384.  
  385. L60000:
  386.     if (prsvec_1.prsa != vindex_1.lookw) {
  387.     return ret_val;
  388.     }
  389. /*                         !LOOK? */
  390.     if (findex_1.cpushf) {
  391.     goto L60100;
  392.     }
  393. /*                         !STARTED PUZZLE? */
  394.     rspeak_(868);
  395. /*                         !NO, DESCRIBE. */
  396.     if ((objcts_1.oflag2[oindex_1.warni - 1] & TCHBT) != 0) {
  397.     rspeak_(869);
  398.     }
  399.     return ret_val;
  400.  
  401. L60100:
  402.     cpinfo_(880, findex_1.cphere);
  403. /*                         !DESCRIBE ROOM. */
  404.     return ret_val;
  405.  
  406. } /* rappl2_ */
  407.  
  408. /* LOOKTO--    DESCRIBE VIEW IN MIRROR HALLWAY */
  409.  
  410. /* DECLARATIONS */
  411.  
  412. static void lookto_(nrm, srm, nt, st, ht)
  413. integer nrm;
  414. integer srm;
  415. integer nt;
  416. integer st;
  417. integer ht;
  418. {
  419.     /* System generated locals */
  420.     integer i__1;
  421.  
  422.     /* Local variables */
  423.     integer i, m1, dir, mrbf;
  424.  
  425.     rspeak_(ht);
  426. /*                         !DESCRIBE HALL. */
  427.     rspeak_(nt);
  428. /*                         !DESCRIBE NORTH VIEW. */
  429.     rspeak_(st);
  430. /*                         !DESCRIBE SOUTH VIEW. */
  431.     dir = 0;
  432. /*                         !ASSUME NO DIRECTION. */
  433.     if ((i__1 = findex_1.mloc - play_1.here, abs(i__1)) != 1) {
  434.     goto L200;
  435.     }
  436. /*                         !MIRROR TO N OR S? */
  437.     if (findex_1.mloc == nrm) {
  438.     dir = 695;
  439.     }
  440.     if (findex_1.mloc == srm) {
  441.     dir = 699;
  442.     }
  443. /*                         !DIR=N/S. */
  444.     if (findex_1.mdir % 180 != 0) {
  445.     goto L100;
  446.     }
  447. /*                         !MIRROR N-S? */
  448.     rspsub_(847, dir);
  449. /*                         !YES, HE SEES PANEL */
  450.     rspsb2_(848, dir, dir);
  451. /*                         !AND NARROW ROOMS. */
  452.     goto L200;
  453.  
  454. L100:
  455.     m1 = mrhere_(play_1.here);
  456. /*                         !WHICH MIRROR? */
  457.     mrbf = 0;
  458. /*                         !ASSUME INTACT. */
  459.     if (m1 == 1 && ! findex_1.mr1f || m1 == 2 && ! findex_1.mr2f) {
  460.     mrbf = 1;
  461.     }
  462.     i__1 = mrbf + 849;
  463.     rspsub_(i__1, dir);
  464. /*                         !DESCRIBE. */
  465.     if (m1 == 1 && findex_1.mropnf) {
  466.     i__1 = mrbf + 823;
  467.     rspeak_(i__1);
  468.     }
  469.     if (mrbf != 0) {
  470.     rspeak_(851);
  471.     }
  472.  
  473. L200:
  474.     i = 0;
  475. /*                         !ASSUME NO MORE TO DO. */
  476.     if (nt == 0 && (dir == 0 || dir == 699)) {
  477.     i = 852;
  478.     }
  479.     if (st == 0 && (dir == 0 || dir == 695)) {
  480.     i = 853;
  481.     }
  482.     if (nt + st + dir == 0) {
  483.     i = 854;
  484.     }
  485.     if (ht != 0) {
  486.     rspeak_(i);
  487.     }
  488. /*                         !DESCRIBE HALLS. */
  489. } /* lookto_ */
  490.  
  491. /* EWTELL--    DESCRIBE E/W NARROW ROOMS */
  492.  
  493. /* DECLARATIONS */
  494.  
  495. static void ewtell_(rm, st)
  496. integer rm;
  497. integer st;
  498. {
  499.     /* System generated locals */
  500.     integer i__1;
  501.  
  502.     /* Local variables */
  503.     integer i;
  504.     logical m1;
  505.  
  506. /* NOTE THAT WE ARE EAST OR WEST OF MIRROR, AND */
  507. /* MIRROR MUST BE N-S. */
  508.  
  509.     m1 = findex_1.mdir + (rm - rindex_1.mrae) % 2 * 180 == 180;
  510.     i = (rm - rindex_1.mrae) % 2 + 819;
  511. /*                         !GET BASIC E/W STRING. */
  512.     if (m1 && ! findex_1.mr1f || ! m1 && ! findex_1.mr2f) {
  513.     i += 2;
  514.     }
  515.     rspeak_(i);
  516.     if (m1 && findex_1.mropnf) {
  517.     i__1 = (i - 819) / 2 + 823;
  518.     rspeak_(i__1);
  519.     }
  520.     rspeak_(825);
  521.     rspeak_(st);
  522. } /* ewtell_ */
  523.